﻿//-----------------------------------------------------------------------------------------
// <copyright file="BlipService.DirectedMessage.cs" company="Jakub Florczyk (www.jakubflorczyk.pl)">
//      Copyright © 2009 Jakub Florczyk (www.jakubflorczyk.pl)
//      http://blipnet.codeplex.com/
// </copyright>
//-----------------------------------------------------------------------------------------

namespace BlipNet
{
    using System;
    using System.Globalization;
    using System.IO;

    /// <summary>
    /// Blip serwis.
    /// </summary>
    public partial class BlipService
    {
        /// <summary>
        /// Pobiera najnowsze wiadomości do lub od bieżącego użytkownika.
        /// </summary>
        /// <param name="limit">Limit ilości.</param>
        /// <returns>Najnowsze wiadomości.</returns>
        public Message[] GetDirectedMessages(int limit)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/directed_messages?limit={0}", limit));
        }

        /// <summary>
        /// Pobiera wszytkie wiadomości do lub od bieżącego użytkownika nowsze od wiadomości z podanym id.
        /// </summary>        
        /// <param name="id">Identyfikator wiadomości.</param>
        /// <returns>Wszytkie wiadomości.</returns>
        public Message[] GetDirectedMessagesSince(int id)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/directed_messages/{0}/since", id));
        }

        /// <summary>
        /// Pobiera najnowsze wiadomości skierowane wszystkich użytkowników.
        /// </summary>        
        /// <param name="limit">Limit ilości.</param>
        /// <returns>Najnowsze wiadomości.</returns>
        public Message[] GetAllDirectedMessages(int limit)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/directed_messages/all?limit={0}", limit));
        }

        /// <summary>
        /// Pobiera najnowsze wiadomości skierowane wszystkich użytkowników nowsze od wiadomości z podanym id.
        /// </summary>        
        /// <param name="limit">Limit ilości.</param>
        /// <param name="id">Identyfikator wiadomości.</param>
        /// <returns>Najnowsze wiadomości.</returns>
        public Message[] GetAllDirectedMessagesSince(int limit, int id)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/directed_messages/{1}/all_since?limit={0}", limit, id));
        }

        /// <summary>
        /// Pobiera ostatnie wiadomości podanego użytkownika.
        /// </summary>        
        /// <param name="login">Login użytkownika.</param>
        /// <param name="limit">Limit ilości.</param>
        /// <returns>Ostatnie wiadomości.</returns>
        public Message[] GetUserDirectedMessages(string login, int limit)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/users/{0}/directed_messages?limit={1}", login, limit));
        }

        /// <summary>
        /// Pobiera wszystkie wiadomości skierowane do podanego użytkownika nowsze od wiadomości o podanym id.
        /// </summary>        
        /// <param name="login">Login użytkownika.</param>
        /// <param name="id">Identyfikator wiadomości.</param>
        /// <returns>Wszystkie wiadomości.</returns>
        public Message[] GetUserDirectedMessagesSince(string login, int id)
        {
            return RequestGetMany<Message>(String.Format(CultureInfo.InvariantCulture, "/users/{0}/directed_messages/{1}/since", login, id));
        }

        /// <summary>
        /// Pobiera wiadomość skierowaną o podanym id.
        /// </summary>        
        /// <param name="id">Identyfikator wiadomości skierowanej.</param>
        /// <returns>Wybrana wiadomość.</returns>
        public Message GetDirectedMessage(int id)
        {
            return RequestGet<Message>(String.Format(CultureInfo.InvariantCulture, "/directed_messages/{0}", id));
        }

        /// <summary>
        /// Tworzy nową wiadomość skierowaną.
        /// </summary>
        /// <param name="login">Login odbiorcy.</param>
        /// <param name="body">Treść wiadomości.</param>
        public void AddDirectedMessage(string login, string body)
        {
            this.RequestPost("/directed_messages", "directed_message[body]", body, "recipient", login);
        }

        /// <summary>
        /// Tworzy nową wiadomość skierowaną.
        /// </summary>
        /// <param name="login">Login odbiorcy.</param>
        /// <param name="body">Treść wiadomości.</param>
        /// <param name="picture">Obrazek wiadomości.</param>
        /// <param name="progress">Delegator postępu.</param>
        public void AddDirectedMessage(string login, string body, Stream picture, UploadProgress progress)
        {
            this.RequestUpload("/directed_messages", "directed_message[picture]", "picture.jpg", picture, progress, "directed_message[body]", body, "directed_message[recipient]", login);
        }

        /// <summary>
        /// Usuwa wiadomość skierowaną o podanym id.
        /// </summary>
        /// <param name="id">Identyfikator wiadomość skierowanej.</param>
        public void DeleteDirectedMessage(int id)
        {
            this.RequestDelete(String.Format(CultureInfo.InvariantCulture, "/directed_messages/{0}", id));
        }
    }
}